Demands for faster, higher-resolution computer graphics systems compel manufacturers of such systems to develop ever more sophisticated means by which the volumes of data required to produce high-quality images are transmitted and processed. In particular, makers of color graphic printers are relying more heavily upon data compression techniques to construct affordable printers which produce high resolution images, and provide broad color palettes, without employing prohibitively expensive quantities of internal memory. For example, a 600 pixel-per-inch printer employing four bytes of data per pixel (each byte corresponding to one of the additive primary colors cyan, magenta, yellow, and black) and generating 8.5 inch by 11 inch printed images, requires 128 megabytes of memory for each uncompressed image. In contrast, a compressed version of such an image can typically be stored in approximately eight megabytes of memory.
In some data compression procedures, the data for an image to be printed is compressed, decompressed, and then recompressed in an iterative fashion such that the resulting amount of image data is small enough to be stored within a fixed memory buffer internal to the printer. For example, the industry standard Joint Photographic Experts Group (JPEG) compression technique employs a quality factor as a bounding parameter. When this technique is employed, the quality of a compressed JPEG image, and the corresponding size of that compressed image, can vary in proportion to the quality factor used during data compression. Since the quality factor is the only parameter that is specified, and the amount of compression is dependent upon the actual data, the precise size of the compressed image data cannot be known prior to compression. As a result, compressed data may have to be recompressed, using a lower quality factor to obtain further reduction, before it is sent to a destination having a relatively small, fixed memory capacity.
Another type of image processing procedure which employs data recompression is disclosed in U.S. Pat. Ser. No. 08/482,877.In that procedure, a previously compressed image is decompressed so that new image content can be incorporated within it, and the resulting new image can be recompressed for storage in an internal printer buffer. U.S. Pat. Ser. Nos. 08/462,619, 08/463,782 and 08/463,783 describe other useful image-data processing techniques which employ recompression. While complete knowledge of these applications is not a prerequisite to understanding the present invention, they provide useful background information, and are thus incorporated in their entireties herein by reference.
Although data processing techniques which employ recompression provide means for producing high-resolution images without requiring excessive amounts of printer memory, they may necessitate frequent swapping of large amounts of image data to and from memory during the data decompression and recompression processes. Such continual data swapping can reduce image throughput rates from the perspective of an end user. To illustrate, FIGS. 1 and 2 depict two data recompression configurations. Referring to FIG. 1, data compression and recompression generally involves passing a certain amount uncompressed image input data, such as one horizontal band of a page, via memory input lines 100 to a main memory buffer 10 so that it may be compressed, and recompressed as necessary, before being sent on to a final destination, such as a printer frame buffer, via data output lines 110. In operation, a compression unit 20 reads uncompressed data from the main memory 10 via compression unit interface lines 120, compresses the data according to a predefined data compression algorithm, and writes the compressed data back to the main memory 10 via the compression unit interface lines 120.
The precise data compression algorithm used by the compression unit 20 will vary from printer to printer, and from application to application. Different algorithms can even be used within the same document, depending upon the content of various pages. The detailed operations of available compression techniques are not critical to an understanding of the present invention, and are thus omitted here. It should be noted, however, that the quantity of compressed output data produced for a given quantity of uncompressed input data can vary in accordance with one or more compression parameters associated with the particular data compression algorithm that is employed.
Should compressed data stored in the main memory 10 of the system of FIG. 1 need to be recompressed, for example to reduce it further, a decompression unit 30 reads the compressed data from the main memory 10 via decompression unit interface lines 130, decompresses it by performing the inverse of the data compression algorithm used by the compression unit 20, and writes the data back to the main memory 10 via the decompression unit interface lines 130. At that point, the compression unit 20 again reads uncompressed data from the main memory 10 via the compression unit interface lines 120, compresses it using an adjusted quality factor, and writes it back to the main memory 10 via the compression unit interface lines 120. This recompression process is carried out in an iterative fashion until the size of the compressed image residing in the main memory 10 is small enough to be passed on to its destination.
While such an approach can function to reduce the printer frame buffer to a reasonable size, it requires that a large amount of data be repeatedly swapped in and out of main memory. More particularly, data for an entire uncompressed image may need to be transmitted from the decompression unit 30 to the main memory 10, and from the main memory 10 to the compression unit 20, during each iterative step of the recompression process. Since repeated reading and writing of large blocks of data can slow image throughput to unacceptable levels, it is desirable to provide a data recompression system that does not require swapping uncompressed data in and out of printer memory.
FIG. 2 depicts an approach to data recompression that might be employed, for example, in a system of the type described in the previously referenced applications. As shown, display list data is passed via renderer input lines 140 to a rendering unit 40 which processes, or renders, graphic objects provided in the display list to produce an uncompressed graphic image. The uncompressed graphic image is passed via memory input lines 100 to a main memory 10, where it is compressed by the compression unit 20 and restored in the memory 10. Data in the main memory 10 must be recompressed when additional object data on the display list is input to the rendering unit 40. In such a case, the decompression unit 30 reads compressed data from the main memory 10 via decompression unit interface lines 130, decompresses it by performing the inverse of the compression algorithm employed by the compression unit 20 to originally compress the data, and writes the decompressed data back to the main memory 10 via the decompression unit interface lines 130. At that point, the renderer 40 processes the updated display list data to modify the decompressed image stored in main memory 10 so that it reflects the additions and changes which are stored in the display list.
Once the entire image has been modified in this manner, the compression unit 20 reads the uncompressed data from main memory 10 via the compression unit interface lines 120, compresses it typically using the same quality factor that was used previously, and writes it back to main memory 10 via the compression unit interface lines 120. Because data compression is a computation-intensive and time consuming task, iteratively modifying images in this fashion can reduce image-data throughput levels. In particular, if the additional data on the display list affects only a small portion of the image, a large amount of data processing and memory access time may be unnecessarily carried out. Thus, there is a need for a data recompression system which minimizes the quantity of data which must be swapped in and out of memory due to additions or changes in a display list input.